package com.example.websocket_demo.controller.user_relation;

import com.example.websocket_demo.service.user_relation.UserRelationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("/userRelation")
public class UserRelationController {
    @Autowired
    private UserRelationService userRelationService;
    /*
    * 步骤一：------------------------------------------------------------------------------
    * 申请好友之前查询用户
    * 传参：{
    *   user_id:-1,//用户id
    *   friend_email:2,//好友邮箱
    * }
    * 假设当前用户为A，A申请加B为好友
    * 搜索用户（根据B的邮箱号）
    *   1.查询用户表user（根据B的邮箱号）
    *       - 没有，则返回（提示没有该用户）
    *       - 有，则下一步
    *   2.查询申请表user_apply_friend（根据当前申请人A+被申请用户B+dr=0查询）
    *       - 有，则读取状态result（待B验证0，已添加1）,返回（提示待B验证）
    *       - 没有，则下一步
    *   3.反过来查询申请表user_apply_friend（当前申请人B+被申请用户A+dr=0查询）
    *       - 有，则读取状态result（待A验证0，已添加1）
    *           - 待验证0（表明待A验证）,返回（提示待A验证）
    *           - 已添加1（该状态不可能出现，因为AB添加成功我会添加一条记录到user_apply_friend，所以不会有反查的机会）
    *       - 没有，则下一步
    *   4.没有申请过，返回（是否创建一条新的记录到user_apply_friend，当前申请人A+被申请用户B）
    * */
    @PostMapping("selectUserBeforeApplyFriend")
    public Map<String,Object> selectUserBeforeApplyFriend(@RequestBody Map<String, Object> map) {
        Integer userId=(Integer) map.get("user_id");//申请人id
        String friendEmail=map.get("friend_email").toString();//接收人id
        return userRelationService.selectUserBeforeApplyFriend(userId,friendEmail);
    }
    /*
    * 步骤二：------------------------------------------------------------------------------
    * 发送好友请求之前需要选择好友分组
    * 接下来开发分组（增删改查页面）
    * */
    /*
    * 1.根据用户id查询用户所有分组
    * 传参：{
    *   user_id:-1
    * }
    * */
    @PostMapping("selectUserGroupInfo")
    public List<Map<String,Object>> selectUserGroupInfo(@RequestBody Map<String, Object> map) {
        Integer userId=(Integer) map.get("user_id");//用户id
        return userRelationService.selectUserGroupInfo(userId);
    }
    /*
    * 2.添加分组
    * 传参：{
    *   user_id:-1,
    *   group_name:'xxx'
    * }
    * */
    @PostMapping("addUserGroupInfo")
    public Map<String,Object> addUserGroupInfo(@RequestBody Map<String, Object> map) {
        Integer userId=(Integer) map.get("user_id");//用户id
        String groupName = map.get("group_name").toString();
        return userRelationService.addUserGroupInfo(userId,groupName);
    }
    /*
    * 步骤三：------------------------------------------------------------------------------
    * 创建一条新的记录到user_apply_friend，当前申请人A+被申请用户B
    * 传参{
    *   user_id:userId,
    *   verification_info:verificationInfo,
    *   group_id:groupId,
    *   friend_id:friendId,
    *   remark:remark
    * }
    * */
    @PostMapping("addApplyFriendInfo")
    public Map<String,Object> addApplyFriendInfo(@RequestBody Map<String, Object> map) {
        return userRelationService.addApplyFriendInfo(map);
    }
    /*
     * 步骤四：------------------------------------------------------------------------------
     * 新朋友页面查询
     * 入参{
     *  user_id:-1
     * }
     * A的userid
     * 查询多种情况
     *     待验证添加好友（待A验证，待对方验证）
     *     同意添加好友（已同意）
     *     拒绝添加好友（A拒绝，对方拒绝）
     * */
    @PostMapping("selectNewFriendPageData")
    public Map<String,Object> selectNewFriendPageData(@RequestBody Map<String, Object> map) {
        Integer userId=(Integer) map.get("user_id");//用户id
        return userRelationService.selectNewFriendPageData(userId);
    }
}
